package com.android.common.utils;

import com.android.common.mvp.model.Node;
import java.util.ArrayList;
import java.util.List;

public class TreeHelper<T> {

    /**
     * 过滤出所有可见的Node
     */
    public List<Node<T>> filterVisibleNode(List<Node<T>> nodes,int visibleParentNodeIndex) {
        List<Node<T>> result = new ArrayList<Node<T>>();
        Node<T> currentNode = nodes.get(visibleParentNodeIndex);
        for (int index = 0 ; index < visibleParentNodeIndex + 1;index++){
            setNodeIcon(nodes.get(index));
            result.add(nodes.get(index));
        }

        if (currentNode.isExpand() && (!currentNode.isLeaf())){
            for (Node<T> node : currentNode.getChildren()) {
                setNodeIcon(node);
                result.add(node);
            }
        }
        return result;
    }

    /**
     * 把一个节点上的所有的内容都挂上去
     * 通过递归的方式，把一个节点上的所有的子节点等都按顺序放入
     */
    public void convertTreeData2List(List<Node<T>> result, Node<T> node, int level,boolean isAllShow) {
        node.setLevel(level);
        if (isAllShow){
            node.setExpand(true);
        }
        result.add(node);
        if (node.isLeaf())
            return;
        for (int i = 0; i < node.getChildren().size(); i++) {
            convertTreeData2List(result, node.getChildren().get(i),node.getLevel() + 1, isAllShow);
        }
    }

    /**
     * 设置节点的图标
     *
     * @param node
     */
    private void setNodeIcon(Node<T> node) {
        if (node.getChildren().size() > 0 && node.isExpand()) {
            node.setIcon(node.iconExpand);
        } else if (node.getChildren().size() > 0 && !node.isExpand()) {
            node.setIcon(node.iconCollapse);
        } else {
            node.setIcon(-1);
        }
    }
}

